/**
 * 给你一个 m 行 n 列的矩阵 matrix ，请按照 顺时针螺旋顺序 ，返回矩阵中的所有元素
 */

/**
 * 思路：
 * 1、如果数组为空，返回空数组
 * 2、定义4个边界以及当前方向
 * 3、当左边界小于等于右边界，且上边界小于等于下边界时，执行while循环；按照右，下，左，上的顺序，
 *  依次将路径上的字符添加到结果里
 * 4、while循环结束后，返回结果
*/

/**
 * @param {number[][]} matrix
 * @return {number[]}
 */
var spiralOrder = function (matrix) {
  if (matrix.length === 0) {
    return [];
  }

  let top = 0;
  let bottom = matrix.length - 1;
  let right = matrix[0].length - 1;
  let left = 0;

  let direaction = "right";
  let result = [];

  /**
   * [1,2,3],
   * [4,5,6],
   * [7,8,9]
   */
  while (left <= right && top <= bottom) {
    if (direaction == 'right') {
      for (let i = left; i <= right; i++) {
        result.push(matrix[top][i])
      }
      top++;
      direaction = 'down';
    } else if (direaction == 'down') {
      for (let i = top; i <= bottom; i++) {
        result.push(matrix[i][right])
      }
      right--;
      direaction = 'left';
    } else if (direaction == 'left') {
      for (let i = right; i >= left; i--) {
        result.push(matrix[bottom][i])
      }
      bottom--;
      direaction = 'top';
    } else if (direaction == 'top') {
      for (let i = bottom; i >= top; i--) {
        result.push(matrix[i][left])
      }
      left++;
      direaction = 'right';
    }
  }

  return result;

};